package com.sws.person.ball;

import com.sws.common.utils.access_tokenutil.util.AccessTokenUtil;
import com.sws.device.service.DeviceIpResolverService;
import com.sws.device.util.DeviceUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * 相机服务类
 * 用于演示如何使用动态设备访问功能
 */
@Service
public class CameraServerService {

    @Autowired
    private CameraServerProperties cameraServerProperties;
    
    @Autowired
    private DeviceIpResolverService deviceIpResolverService;

    /**
     * 获取设备基础URL
     * 
     * @param sn 设备序列号
     * @return 设备基础URL
     */
    public String getBaseUrl(String sn) {
        if (StringUtils.hasLength(sn)) {
            return cameraServerProperties.getBaseUrlBySn(sn);
        }
        return cameraServerProperties.getBaseUrl();
    }
    
    /**
     * 获取设备图片前缀URL
     * 
     * @param sn 设备序列号
     * @return 设备图片前缀URL
     */
    public String getPhotoPrefix(String sn) {
        if (StringUtils.hasLength(sn)) {
            return cameraServerProperties.getPhotoPrefixBySn(sn);
        }
        return cameraServerProperties.getPhotoPrefix();
    }
    
    /**
     * 获取设备访问令牌
     * 
     * @param sn 设备序列号
     * @return 设备访问令牌
     */
    public String getAccessToken(String sn) {
        if (StringUtils.hasLength(sn)) {
            return AccessTokenUtil.getTokenBySn(sn, deviceIpResolverService);
        }
        // 如果没有指定SN，则使用默认设备IP获取令牌
        String defaultDeviceIp = AccessTokenUtil.getdefaultDeviceIp();
        return AccessTokenUtil.getToken(defaultDeviceIp);
    }
    
    /**
     * 构建设备API URL
     * 
     * @param sn 设备序列号
     * @param apiPath API路径
     * @return 完整的API URL
     */
    public String buildApiUrl(String sn, String apiPath) {
        String baseUrl = getBaseUrl(sn);
        if (!StringUtils.hasLength(baseUrl)) {
            return null;
        }
        
        // 确保apiPath以/开头
        if (apiPath != null && !apiPath.startsWith("/")) {
            apiPath = "/" + apiPath;
        }
        
        return baseUrl + apiPath;
    }
    
    /**
     * 构建设备图片URL
     * 
     * @param sn 设备序列号
     * @param imagePath 图片路径
     * @return 完整的图片URL
     */
    public String buildImageUrl(String sn, String imagePath) {
        String photoPrefix = getPhotoPrefix(sn);
        if (!StringUtils.hasLength(photoPrefix)) {
            return null;
        }
        
        // 确保imagePath不以/开头
        if (imagePath != null && imagePath.startsWith("/")) {
            imagePath = imagePath.substring(1);
        }
        
        return photoPrefix + imagePath;
    }
    
    /**
     * 示例：调用设备API
     * 
     * @param sn 设备序列号
     * @param apiPath API路径
     * @return API响应结果
     */
    public String callDeviceApi(String sn, String apiPath) {
        String apiUrl = buildApiUrl(sn, apiPath);
        String accessToken = getAccessToken(sn);
        
        if (!StringUtils.hasLength(apiUrl) || !StringUtils.hasLength(accessToken)) {
            return "无法获取设备API URL或访问令牌";
        }
        
        // 这里只是演示，实际调用需要使用HTTP客户端
        System.out.println("调用设备API: " + apiUrl);
        System.out.println("使用访问令牌: " + accessToken);
        
        return "模拟调用设备API成功";
    }
} 